home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / msysjour / vol07 / 05 / cqa / pump_owl.cpp < prev   
Text File  |  1992-09-01  |  4KB  |  165 lines

  1. // pump_owl.cpp
  2.  
  3. #include <owl.h>
  4. #include <toolhelp.h>
  5. #include "resource.h"
  6.  
  7. class TMyApp : public TApplication
  8. {
  9. public:
  10.   TMyApp(LPSTR AName, HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  11.     : TApplication(AName, hInstance, hPrevInstance, lpCmdLine, nCmdShow) {};
  12.   virtual void InitMainWindow();
  13.  
  14.   //  Override MessageLoop functions for performance
  15.   //
  16.   BOOL ProcessAccels    (LPMSG PMessage) {return FALSE;};
  17.   BOOL ProcessAppMsg    (LPMSG PMessage) {return FALSE;};
  18.   BOOL ProcessDlgMsg    (LPMSG PMessage) {return FALSE;};
  19.   BOOL ProcessMDIAccels (LPMSG PMessage) {return FALSE;};
  20. };
  21.  
  22. _CLASSDEF(TMyWindow)
  23. class TMyWindow : public TWindow
  24. {
  25. private:
  26.   long    m_lMsgCount;
  27.     TIMERINFO m_ti;
  28.     TIMERINFO FAR* m_lpti;
  29.     DWORD     m_dwStartTime  ,
  30.         m_dwStopTime   ,
  31.         m_dwCalibrationTime;
  32. public:
  33.   TMyWindow(PTWindowsObject AParent, LPSTR ATitle)
  34.     : TWindow(AParent, ATitle)
  35.      {
  36.      AssignMenu("MainMenu");
  37.      m_ti.dwSize = sizeof (TIMERINFO);
  38.      m_lpti      = &m_ti;
  39.      };
  40.  
  41.    void CMStartPostPump(RTMessage Msg) = [CM_FIRST + IDM_STARTPOSTMESSAGE];
  42.    void CMStartSendPump(RTMessage Msg) = [CM_FIRST + IDM_STARTSENDMESSAGE];
  43.    void WMUserPost(RTMessage Msg)      = [WM_FIRST + WM_USER];
  44.    void WMUserSend(RTMessage Msg)      = [WM_FIRST + WM_USER+1];
  45. };
  46.  
  47.  
  48. void TMyWindow::CMStartPostPump(RTMessage)
  49. {
  50.  //  Calibrate message pump
  51.  //
  52.  SetCaption ("Calibrating Message Pump...");
  53.  m_lMsgCount   = 0;
  54.  ::TimerCount (m_lpti);
  55.  m_dwStartTime = m_ti.dwmsSinceStart;
  56.  
  57.  if (m_lMsgCount < 10000)
  58.  {
  59.  m_lMsgCount++;
  60.  }
  61.  
  62.  ::TimerCount (m_lpti);
  63.  m_dwStopTime = m_ti.dwmsSinceStart;
  64.  m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  65.  
  66.  //  Now Start message pump
  67.  //
  68.  SetCaption ("Running 10,000 messages thru pump...");
  69.  m_lMsgCount   = 0;
  70.  ::TimerCount (m_lpti);
  71.  m_dwStartTime = m_ti.dwmsSinceStart;
  72.  PostMessage (HWindow, WM_USER, 0, 0);
  73. }
  74.  
  75. void TMyWindow::WMUserPost (RTMessage)
  76.     {
  77.     char string [40];
  78.  
  79.     m_lMsgCount++;
  80.  
  81.     if (m_lMsgCount < 10000)
  82.         {
  83.         //    Keep message pump going
  84.         //
  85.         PostMessage (HWindow, WM_USER, 0, 0L);
  86.         }
  87.  
  88.     else
  89.         {
  90.         //    Stop message pump & display msg rate
  91.         //
  92.         ::TimerCount (m_lpti);
  93.         m_dwStopTime = m_ti.dwmsSinceStart;
  94.  
  95.         DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  96.         wsprintf (string, "BC w/OWL: Posted Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  97.         SetCaption (string);
  98.         }
  99. }
  100.  
  101. void TMyWindow::CMStartSendPump(RTMessage)
  102. {
  103.  //  Calibrate message pump
  104.  //
  105.  SetCaption ("Calibrating Message Pump...");
  106.  m_lMsgCount   = 0;
  107.  ::TimerCount (m_lpti);
  108.  m_dwStartTime = m_ti.dwmsSinceStart;
  109.  
  110.  if (m_lMsgCount < 10000)
  111.  {
  112.  m_lMsgCount++;
  113.  }
  114.  
  115.  ::TimerCount (m_lpti);
  116.  m_dwStopTime = m_ti.dwmsSinceStart;
  117.  m_dwCalibrationTime = m_dwStopTime - m_dwStartTime;
  118.  
  119.  //  Now Start message pump
  120.  //
  121.  SetCaption ("Sending 10,000 messages thru pump...");
  122.  m_lMsgCount   = 0;
  123.  ::TimerCount (m_lpti);
  124.  m_dwStartTime = m_ti.dwmsSinceStart;
  125.  
  126.  while (m_lMsgCount < 10000)
  127.       {
  128.       SendMessage (HWindow, WM_USER+1, 0, 0);
  129.       }
  130. }
  131.  
  132. void TMyWindow::WMUserSend (RTMessage)
  133. {
  134. char string [40];
  135.  
  136.      m_lMsgCount++;
  137.  
  138.      if (m_lMsgCount >= 10000)
  139.         {
  140.         //    Stop message pump & display msg rate
  141.         //
  142.         ::TimerCount (m_lpti);
  143.         m_dwStopTime = m_ti.dwmsSinceStart;
  144.  
  145.         DWORD dwElapsedTime = (m_dwStopTime - m_dwStartTime) - m_dwCalibrationTime;
  146.         wsprintf (string, "BC w/OWL: Sent Msgs per second = %ld", (LONG) (1000. * ((double)m_lMsgCount/dwElapsedTime)));
  147.         SetCaption (string);
  148.         }
  149. }
  150.  
  151.  
  152. void TMyApp::InitMainWindow()
  153. {
  154.   MainWindow = new TMyWindow(NULL, Name);
  155. }
  156.  
  157. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  158.   LPSTR lpCmdLine, int nCmdShow)
  159. {
  160.   TMyApp MyApp("Sample ObjectWindows Program", hInstance, hPrevInstance,
  161.                lpCmdLine, nCmdShow);
  162.   MyApp.Run();
  163.   return MyApp.Status;
  164. }
  165.